home *** CD-ROM | disk | FTP | other *** search
- /***********************************************************
- File: ATMDebug.c
-
- Contains: ATM Streams Debugging Utilities
-
- Written by:
-
- Copyright: © 1994 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- To Do:
- ***********************************************************/
-
-
- /***********************************************************
- INCLUDES
- ***********************************************************/
-
- #include "ATMDebug.h"
-
- #include <OpenTptDev.h>
- #include <mistream.h>
- #include <tihdr.h>
- #include <dlpi.h>
-
- /***********************************************************
- DEFINES
- ***********************************************************/
-
- #define TEXTSIZE 10
-
- #define NULL 0
-
- /***********************************************************
- EXTERNS
- ***********************************************************/
-
- //extern char *sprintf();
-
- /***********************************************************
- STRUCTS AND TYPEDEFS
- ***********************************************************/
-
- typedef struct {
- char *name;
- int num;
- } msg_name_t;
-
- /***********************************************************
- GLOBALS
- ***********************************************************/
-
- /* Globals */
-
- static msg_name_t stream_msgtab[] = {
- { "M_DATA" , 00 }, /* regular data */
- { "M_PROTO" , 01 }, /* protocol control */
- { "M_BREAK" , 010 }, /* line break */
- { "M_PASSFP" , 011 }, /* pass file pointer */
- { "M_SIG" , 013 }, /* generate process loopnal */
- { "M_DELAY" , 014 }, /* real-time xmit delay (1 param) */
- { "M_CTL" , 015 }, /* device-specific control message */
- { "M_IOCTL" , 016 }, /* ioctl; set/get params */
- { "M_SETOPTS" , 020 }, /* set various stream head options */
- { "M_IOCACK" , 0201 }, /* acknowledge ioctl */
- { "M_IOCNAK" , 0202 }, /* negative ioctl acknowledge */
- { "M_PCPROTO" , 0203 }, /* priority proto message */
- { "M_PCSIG" , 0204 }, /* generate process loopnal */
- { "M_FLUSH" , 0206 }, /* flush your queues */
- { "M_STOP" , 0207 }, /* stop transmission immediately */
- { "M_START" , 0210 }, /* restart transmission after stop */
- { "M_HANGUP" , 0211 }, /* line disconnect */
- { "M_ERROR" , 0212 }, /* fatal error used to set u.u_error */
- { "M_STOPI" , 0213 }, /* stop reception immediately */
- { "M_STARTI" , 0214 }, /* restart reception after stop */
- { "M_UNHANGUP" , 0215 }, /* line reconnect, looph */
- { NULL , NULL }
- };
-
-
- static msg_name_t tpi_msgtab[] = {
- { "T_BIND_REQ", T_BIND_REQ},
- { "T_CONN_REQ", T_CONN_REQ}, /* connection request */
- { "T_CONN_RES", T_CONN_RES}, /* respond to connection indication */
- { "T_DATA_REQ", T_DATA_REQ},
- { "T_DISCON_REQ", T_DISCON_REQ},
- { "T_EXDATA_REQ", T_EXDATA_REQ},
- { "T_INFO_REQ", T_INFO_REQ},
- { "T_OPTMGMT_REQ", T_OPTMGMT_REQ},
- { "T_ORDREL_REQ", T_ORDREL_REQ},
- { "T_UNBIND_REQ", T_UNBIND_REQ},
- { "T_UNITDATA_REQ", T_UNITDATA_REQ},
- { "T_ADDR_REQ", T_ADDR_REQ}, /* Get address request */
- { "T_UREQUEST_REQ", T_UREQUEST_REQ}, /* UnitRequest (transaction) req */
- { "T_REQUEST_REQ", T_REQUEST_REQ}, /* Request (CO transaction) req */
- { "T_UREPLY_REQ", T_UREPLY_REQ}, /* UnitRequest (transaction) req */
- { "T_REPLY_REQ", T_REPLY_REQ}, /* REPLY (CO transaction) req */
- // { "T_CANCELUREQ_REQ", T_CANCELUREQ_REQ}, /* Cancel (transaction) UnitReq */
- // { "T_CANCELREQ_REQ", T_CANCELREQ_REQ}, /* Cancel (CO transaction) req */
- { "T_CANCELREQUEST_REQ", T_CANCELREQUEST_REQ}, /* Cancel outgoing request */
- { "T_CANCELREPLY_REQ", T_CANCELREPLY_REQ}, /* Cancel incoming request */
- // { "T_FEEDBACK_REQ", T_FEEDBACK_REQ}, /* used internally */
- { "T_REGNAME_REQ", T_REGNAME_REQ}, /* Request name registration */
- { "T_DELNAME_REQ", T_DELNAME_REQ}, /* Request delete name registration */
- { "T_LKUPNAME_REQ", T_LKUPNAME_REQ}, /* Request name lookup */
- // { "T_CONFIRMNAME_REQ", T_CONFIRMNAME_REQ}, /* Request name-address confirmation */
-
- /* Transport generated indications and acknowledgements */
- { "T_BIND_ACK", T_BIND_ACK},
- { "T_CONN_CON", T_CONN_CON}, /* connection confirmation */
- { "T_CONN_IND", T_CONN_IND}, /* incoming connection indication */
- { "T_DATA_IND", T_DATA_IND},
- { "T_DISCON_IND", T_DISCON_IND},
- { "T_ERROR_ACK ", T_ERROR_ACK},
- { "T_EXDATA_IND", T_EXDATA_IND},
- { "T_INFO_ACK", T_INFO_ACK},
- { "T_OK_ACK", T_OK_ACK},
- { "T_OPTMGMT_ACK", T_OPTMGMT_ACK},
- { "T_ORDREL_IND", T_ORDREL_IND},
- { "T_UNITDATA_IND", T_UNITDATA_IND},
- { "T_UDERROR_IND", T_UDERROR_IND},
- { "T_ADDR_ACK", T_ADDR_ACK}, /* Get address ack */
- { "T_UREQUEST_IND", T_UREQUEST_IND}, /* UnitRequest (transaction) ind */
- { "T_REQUEST_IND", T_REQUEST_IND}, /* Request (CO transaction) ind */
- // { "T_UREQUEST_CON", T_UREQUEST_CON}, /* UnitReq(transaction)response */
- // { "T_REQUEST_CON", T_REQUEST_CON}, /* Request(CO transaction)response */
- { "T_UREPLY_ACK", T_UREPLY_ACK}, /* UnitReq(transaction)response ack */
- { "T_REPLY_ACK", T_REPLY_ACK}, /* Request(CO trans)response ack */
- { "T_UREPLY_IND", T_UREPLY_IND}, /* Incoming unit reply */
- { "T_REPLY_IND", T_REPLY_IND}, /* Incoming reply */
-
- // { "T_RESOLVE_REQ", T_RESOLVE_REQ},
- // { "T_RESOLVE_ACK", T_RESOLVE_ACK},
- { "T_RESOLVEADDR_REQ", T_RESOLVEADDR_REQ},
- { "T_RESOLVEADDR_ACK", T_RESOLVEADDR_ACK},
-
- { "T_LKUPNAME_CON", T_LKUPNAME_CON}, /* Results of name lookup */
- { "T_LKUPNAME_RES", T_LKUPNAME_RES}, /* Partial results of name lookup */
- { "T_SEQUENCED_ACK", T_SEQUENCED_ACK}, /* Sequenced version of OK or ERROR ACK */
- { NULL , NULL }
- };
-
- static msg_name_t dlpi_msgtab[] = {
- { "DL_INFO_REQ" , 0x00 },
- { "DL_INFO_ACK" , 0x03 },
- { "DL_ATTACH_REQ" , 0x0b },
- { "DL_DETACH_REQ" , 0x0c },
- { "DL_BIND_REQ" , 0x01 },
- { "DL_BIND_ACK" , 0x04 },
- { "DL_UNBIND_REQ" , 0x02 },
- { "DL_OK_ACK" , 0x06 },
- { "DL_ERROR_ACK" , 0x05 },
- { "DL_SUBS_BIND_REQ" , 0x1b },
- { "DL_SUBS_BIND_ACK" , 0x1c },
- { "DL_SUBS_UNBIND_REQ" , 0x15 },
- { "DL_ENABMULTI_REQ" , 0x1d },
- { "DL_DISABMULTI_REQ" , 0x1e },
- { "DL_PROMISCON_REQ" , 0x1f },
- { "DL_PROMISCOFF_REQ" , 0x20 },
- { "DL_UNITDATA_REQ" , 0x07 },
- { "DL_UNITDATA_IND" , 0x08 },
- { "DL_UDERROR_IND" , 0x09 },
- { "DL_UDQOS_REQ", 0x0a},
- { "DL_CONNECT_REQ", 0x0d},
- { "DL_CONNECT_IND", 0x0e},
- { "DL_CONNECT_RES", 0x0f},
- { "DL_CONNECT_CON", 0x10},
- { "DL_TOKEN_REQ", 0x11},
- { "DL_TOKEN_ACK", 0x12},
- { "DL_DISCONNECT_REQ", 0x13 },
- { "DL_DISCONNECT_IND", 0x14 },
- { "DL_RESET_REQ", 0x17},
- { "DL_RESET_IND", 0x18},
- { "DL_RESET_RES", 0x19},
- { "DL_RESET_CON", 0x1a},
- { "DL_DATA_REQ", 0x100}, /* remove */
- { "DL_DATA_IND", 0x101}, /* remove */
- { "DL_DATA_ACK_REQ", 0x21},
- { "DL_DATA_ACK_IND", 0x22},
- { "DL_DATA_ACK_STATUS_IND", 0x23 },
- { "DL_REPLY_REQ", 0x24},
- { "DL_REPLY_IND", 0x25},
- { "DL_REPLY_STATUS_IND", 0x26 },
- { "DL_REPLY_UPDATE_REQ", 0x27 },
- { "DL_REPLY_UPDATE_STATUS_IND ", 0x28 },
- { "DL_XID_REQ", 0x29 },
- { "DL_XID_IND", 0x2a},
- { "DL_XID_RES", 0x2b},
- { "DL_XID_CON", 0x2c},
- { "DL_TEST_REQ", 0x2d},
- { "DL_TEST_IND", 0x2e},
- { "DL_TEST_RES", 0x2f},
- { "DL_TEST_CON", 0x30},
- { "DL_PHYS_ADDR_REQ", 0x31},
- { "DL_PHYS_ADDR_ACK", 0x32},
- { "DL_SET_PHYS_ADDR_REQ", 0x33 },
- { "DL_GET_STATISTICS_REQ", 0x34 },
- { "DL_GET_STATISTICS_ACK", 0x35 },
- { "DL_UNATTACHED", 0x04},
- { "DL_ATTACH_PENDING", 0x05 },
- { "DL_DETACH_PENDING", 0x06 },
- { "DL_UNBOUND", 0x00},
- { "DL_BIND_PENDING", 0x01},
- { "DL_UNBIND_PENDING", 0x02 },
- { "DL_IDLE", 0x03 },
- { "DL_UDQOS_PENDING", 0x07},
- { "DL_OUTCON_PENDING", 0x08 },
- { "DL_INCON_PENDING", 0x09},
- { "DL_CONN_RES_PENDING", 0x0a },
- { "DL_DATAXFER", 0x0b},
- { "DL_USER_RESET_PENDING", 0x0c },
- { "DL_PROV_RESET_PENDING", 0x0d },
- { "DL_RESET_RES_PENDING", 0x0e },
- { "DL_DISCON8_PENDING", 0x0f },
- { "DL_DISCON9_PENDING", 0x10 },
- { "DL_DISCON11_PENDING", 0x11 },
- { "DL_DISCON12_PENDING", 0x12 },
- { "DL_DISCON13_PENDING", 0x13 },
- { "DL_SUBS_BIND_PND", 0x14},
- { "DL_SUBS_UNBIND_PND", 0x15 },
- { NULL , NULL }
- };
-
- char* stream_msg_type(mblk_t *mp);
- char* tpi_msg_type(mblk_t *mp);
- char *dlpi_msg_type(mblk_t *mp);
-
- void dump_dlpi_msg(mblk_t* mp);
- void dump_tpi_msg(mblk_t* mp);
-
- char* stream_msg_type(mblk_t *mp)
- {
- static char err_msg[64];
- msg_name_t *msg;
-
- for (msg = &stream_msgtab[0]; msg->name != NULL; msg++)
- if (mp->b_datap->db_type == msg->num)
- return(msg->name);
-
- return((char*) sprintf(err_msg, "message num %d not defined",
- mp->b_datap->db_type));
- }
-
- char* tpi_msg_type(mblk_t *mp)
- {
- static char err_msg[64];
- msg_name_t *msg;
-
- if ((mp->b_datap->db_type != M_PROTO) &&
- (mp->b_datap->db_type != M_PCPROTO))
- return(" "); /* not a TPI message */
-
- for (msg = &tpi_msgtab[0]; msg->name != NULL; msg++)
- if (((union T_primitives *)mp->b_rptr)->type == msg->num)
- return(msg->name);
-
- return((char*) sprintf(err_msg, "TPI msg num %d not defined",
- ((union T_primitives *)mp->b_rptr)->type));
- }
-
- char *dlpi_msg_type(mblk_t *mp)
- {
- static char err_msg[64];
- msg_name_t *msg;
-
- if ((mp->b_datap->db_type != M_PROTO) &&
- (mp->b_datap->db_type != M_PCPROTO))
- return(" "); /* not a DLPI message */
-
- for (msg = &dlpi_msgtab[0]; msg->name != NULL; msg++)
- if (((union DL_primitives *)mp->b_rptr)->dl_primitive == msg->num)
- return(msg->name);
-
- return((char*) sprintf(err_msg, "DLPI msg num %d not defined",
- ((union DL_primitives *)mp->b_rptr)->dl_primitive));
- }
-
- void dump_dlpi_msg(mblk_t* mp)
- {
- struct datab *db;
- unsigned char *cp;
- // int total
- int len;
- // int i;
- char tempstr[255];
-
- for ( ; mp; mp = mp->b_cont) {
-
- len = mp->b_wptr - mp->b_rptr;
- cp = mp->b_rptr;
- db = mp->b_datap;
-
- sprintf(tempstr, "%s: (%s) size=%ld, len=%ld, base=0x%lx, rptr=0x%lx, wptr=0x%lx",
- stream_msg_type(mp), dlpi_msg_type(mp),
- db->db_lim - db->db_base, len, db->db_base, mp->b_rptr, mp->b_wptr);
- debugstr(tempstr);
- }
- }
-
- void dump_tpi_msg(mblk_t* mp)
- {
- struct datab *db;
- unsigned char *cp;
- // int total
- int len;
- // int i;
- char tempstr[255];
-
- for ( ; mp; mp = mp->b_cont) {
-
- len = mp->b_wptr - mp->b_rptr;
- cp = mp->b_rptr;
- db = mp->b_datap;
-
- sprintf(tempstr, "%s: (%s) size=%ld, len=%ld, base=0x%lx, rptr=0x%lx, wptr=0x%lx",
- stream_msg_type(mp), tpi_msg_type(mp),
- db->db_lim - db->db_base, len, db->db_base, mp->b_rptr, mp->b_wptr);
- debugstr(tempstr);
- }
- }
-